package middlewares

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func cors() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		method := ctx.Request.Method
		// 设置允许跨域请求的域名，* 表示允许所有域名
		ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")

		// 设置允许的方法（如：GET, POST, PUT, DELETE, OPTIONS）
		ctx.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")

		// 设置允许的请求头（如：Content-Type）
		ctx.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

		// 允许携带凭证（cookies, HTTP认证及客户端SSL证明等）
		ctx.Writer.Header().Set("Access-Control-Allow-Credentials", "true")

		// 设置预检请求的缓存时间
		ctx.Writer.Header().Set("Access-Control-Max-Age", "1728000")

		if method == "OPTIONS" {
			ctx.AbortWithStatus(http.StatusNoContent)
		}
		ctx.Next()
	}
}
